/*
 * concepts.hpp
 *
 *  Created on: Jul 26, 2010
 *      Author: sdaniele
 */

#ifndef CONCEPTS_HPP_
#define CONCEPTS_HPP_

#include "boost/concept_check.hpp"
#include "boost/concept/assert.hpp"
#include <boost/type_traits.hpp>
#include <boost/function_types/function_type.hpp>

namespace syscpar{namespace test{

template <class X>
struct action
	: ::boost::DefaultConstructible<X>
{

public:
	BOOST_CONCEPT_USAGE(action){
		X::go();
	}
};

template < class X >
struct sc_spawnable
	: ::boost::Generator<X,void>
{};


template < class X >
struct sc_spawnable_with_result
	: ::boost::AdaptableGenerator<X,typename X::result_type>
{};

}}

#endif /* CONCEPTS_HPP_ */
